#ifndef CONSTANTS_H
#define CONSTANTS_H

#define MAX_ID_SIZE             20
#define MAX_NAME_SIZE           100
#define MAX_GENDER_SIZE         10
#define MAX_DOB_SIZE            11

// ANSI 转义码
#define RESET       "\033[0m"
#define BOLD        "\033[1m"
#define UNDERLINE   "\033[4m"
#define ITALIC      "\033[3m"
#define RED         "\033[31m"
#define GREEN       "\033[32m"
#define YELLOW      "\033[33m"
#define BLUE        "\033[34m"
#define MAGENTA     "\033[35m"
#define CYAN        "\033[36m"
#define WHITE       "\033[37m"

// 定义边框和分隔线的宏（带颜色）
#define BORDER       CYAN "┌───────────────────────────────────────────────────────────────┐\n" RESET
#define SEPARATOR    CYAN "│" BLUE "───────────────────────────────────────────────────────────────" GREEN "│\n" RESET
#define FOOTER       CYAN "└───────────────────────────────────────────────────────────────┘\n" RESET

#define BORDER_BOLD      MAGENTA "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n" RESET
#define SEPARATOR_BOLD    MAGENTA "┃" YELLOW "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" GREEN "┃\n" RESET
#define FOOTER_BOLD       MAGENTA "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n" RESET

/* 主菜单模块 */

// 定义主菜单项标题的文本（中文）
#define CN_TITLE        "学校信息管理系统 V1.0"
#define EN_TITLE        "School Information Management System V1.0"

// 定义菜单头部宏函数
#define MENU_HEADER(color, text, indent) \
    BORDER_BOLD \
    BOLD color UNDERLINE indent text "\n" RESET \
    SEPARATOR_BOLD

#define MODULE_HEADER(color, text, indent) \
    BORDER \
    BOLD color UNDERLINE indent text "\n" RESET \
    SEPARATOR

// 定义主菜单头部（中文，带颜色）
#define CN_MENU_HEADER MENU_HEADER(GREEN, CN_TITLE, "\t\t\t")

// 定义主菜单头部（英文，带颜色）
#define EN_MENU_HEADER MENU_HEADER(GREEN, EN_TITLE, "\t\t")

// 定义主菜单项的文本（中文）
#define CN_ITEM1_TEXT "学生信息管理"
#define CN_ITEM2_TEXT "教师信息管理"
#define CN_ITEM3_TEXT "学生成绩管理"
#define CN_ITEM4_TEXT "导出文件    "
#define CN_ITEM5_TEXT "导入文件    "
#define CN_ITEM6_TEXT "语言选择    "
#define CN_ITEM7_TEXT "退出系统    "

// 定义主菜单项的文本（英文）
#define EN_ITEM1_TEXT "Student Information Management"
#define EN_ITEM2_TEXT "Teacher Information Management"
#define EN_ITEM3_TEXT "Student Grades Management     "
#define EN_ITEM4_TEXT "Export File                   "
#define EN_ITEM5_TEXT "Import File                   "
#define EN_ITEM6_TEXT "Language Selection            "
#define EN_ITEM7_TEXT "Exit System                   "

// 定义带颜色的菜单项宏函数
#define CN_MENU_ITEM_GREEN(NUM, TEXT) MAGENTA "┃ " NUM " " TEXT "\t\t\t\t\t\t┃\n" RESET
#define EN_MENU_ITEM_GREEN(NUM, TEXT) MAGENTA "┃" NUM " " TEXT "\t\t\t\t┃\n" RESET

// 定义主菜单项（中文，带颜色）
#define CN_MENU_ITEM1 CN_MENU_ITEM_GREEN("1.", CN_ITEM1_TEXT)
#define CN_MENU_ITEM2 CN_MENU_ITEM_GREEN("2.", CN_ITEM2_TEXT)
#define CN_MENU_ITEM3 CN_MENU_ITEM_GREEN("3.", CN_ITEM3_TEXT)
#define CN_MENU_ITEM4 CN_MENU_ITEM_GREEN("4.", CN_ITEM4_TEXT)
#define CN_MENU_ITEM5 CN_MENU_ITEM_GREEN("5.", CN_ITEM5_TEXT)
#define CN_MENU_ITEM6 CN_MENU_ITEM_GREEN("6.", CN_ITEM6_TEXT)
#define CN_MENU_ITEM7 CN_MENU_ITEM_GREEN("7.", CN_ITEM7_TEXT)

// 定义主菜单项（英文，带颜色）
#define EN_MENU_ITEM1 EN_MENU_ITEM_GREEN("1.", EN_ITEM1_TEXT)
#define EN_MENU_ITEM2 EN_MENU_ITEM_GREEN("2.", EN_ITEM2_TEXT)
#define EN_MENU_ITEM3 EN_MENU_ITEM_GREEN("3.", EN_ITEM3_TEXT)
#define EN_MENU_ITEM4 EN_MENU_ITEM_GREEN("4.", EN_ITEM4_TEXT)
#define EN_MENU_ITEM5 EN_MENU_ITEM_GREEN("5.", EN_ITEM5_TEXT)
#define EN_MENU_ITEM6 EN_MENU_ITEM_GREEN("6.", EN_ITEM6_TEXT)
#define EN_MENU_ITEM7 EN_MENU_ITEM_GREEN("7.", EN_ITEM7_TEXT)

#define DEFINE_MENU(LANGUAGE) \
    LANGUAGE##_MENU_HEADER \
    LANGUAGE##_MENU_ITEM1 \
    LANGUAGE##_MENU_ITEM2 \
    LANGUAGE##_MENU_ITEM3 \
    LANGUAGE##_MENU_ITEM4 \
    LANGUAGE##_MENU_ITEM5 \
    LANGUAGE##_MENU_ITEM6 \
    LANGUAGE##_MENU_ITEM7 \
    FOOTER_BOLD \
    LANGUAGE##_PROMPT


// 使用示例
#define CN_MENU \
    DEFINE_MENU(CN)

#define EN_MENU \
    DEFINE_MENU(EN)


// 定义提示操作的宏（中文和英文，带颜色）
#define CN_PROMPT YELLOW "│ 请选择操作（1-7）：" RESET
#define EN_PROMPT YELLOW "│ Please select an option (1-7):" RESET


/* 语言选择菜单 */

#define CN_LANGUAGE_SELECTION_TEXT "语言选择"
#define EN_LANGUAGE_SELECTION_TEXT "Language Selection"
#define CN_CN_TEXT "中文"
#define CN_EN_TEXT "英文"
#define EN_CN_TEXT "Chinese"
#define EN_EN_TEXT "English"

#define LANGUAGE_SELECTION_HEADER(TEXT) BOLD GREEN "│ " TEXT "\n" RESET
#define LUANGEN_ITEM(NUM, TEXT) GREEN "│ " NUM " " TEXT " \n" RESET

// 定义语言选择菜单中的文本（中文）
#define CN_LANGUAGE_SELECTION_HEADER LANGUAGE_SELECTION_HEADER(CN_LANGUAGE_SELECTION_TEXT)
#define CN_LANGUAGE_OPTION1 LUANGEN_ITEM("1. ", CN_CN_TEXT)
#define CN_LANGUAGE_OPTION2 LUANGEN_ITEM("2. ", CN_EN_TEXT)

// 定义语言选择菜单中的文本（英文）
#define EN_LANGUAGE_SELECTION_HEADER LANGUAGE_SELECTION_HEADER(EN_LANGUAGE_SELECTION_TEXT)
#define EN_LANGUAGE_OPTION1 LUANGEN_ITEM("1. ", EN_CN_TEXT)
#define EN_LANGUAGE_OPTION2 LUANGEN_ITEM("2. ", EN_EN_TEXT)

// 定义无效选择的提示信息（中文和英文）
#define CN_INVALID_CHOICE_TEXT "无效的选择，请重新选择。"
#define EN_INVALID_CHOICE_TEXT "Invalid choice, please try again."

#define INVALID_CHOICE(TEXT) RED " " TEXT " \n" RESET
#define INVALID_CHOICE_CN INVALID_CHOICE(CN_INVALID_CHOICE_TEXT)
#define INVALID_CHOICE_EN INVALID_CHOICE(EN_INVALID_CHOICE_TEXT)

// 定义语言选择菜单的宏（中文和英文，带颜色）
//
#define CN_LANGUAGE_MENU \
    "\n" BORDER \
    CN_LANGUAGE_SELECTION_HEADER \
    CN_LANGUAGE_OPTION1 \
    CN_LANGUAGE_OPTION2 \
    FOOTER \
    CN_PROMPT

#define EN_LANGUAGE_MENU \
    "\n" BORDER \
    EN_LANGUAGE_SELECTION_HEADER \
    EN_LANGUAGE_OPTION1 \
    EN_LANGUAGE_OPTION2 \
    FOOTER \
    EN_PROMPT




/* 学生模块 */
#define CN_STUDENT_MODULE_TITLE "学生管理模块"

#define CN_STUDENT_HEADER MODULE_HEADER(ITALIC, CN_STUDENT_MODULE_TITLE, "\t\t\t")

#define CN_STUDENT1_TEXT "添加学生信息          "
#define CN_STUDENT2_TEXT "删除学生信息          "
#define CN_STUDENT3_TEXT "修改学生信息          "
#define CN_STUDENT4_TEXT "查询学生信息          "
#define CN_STUDENT5_TEXT "获取所有学生信息      "
#define CN_STUDENT6_TEXT "返回上一级            "

#define CN_STUDENT_ITEM_CYAN(NUM, TEXT) CYAN "│ " NUM " " TEXT "\t\t\t\t\t│\n" RESET

#define CN_STUDENT_ITEM1 CN_STUDENT_ITEM_CYAN("1.",CN_STUDENT1_TEXT)
#define CN_STUDENT_ITEM2 CN_STUDENT_ITEM_CYAN("2.",CN_STUDENT2_TEXT)
#define CN_STUDENT_ITEM3 CN_STUDENT_ITEM_CYAN("3.",CN_STUDENT3_TEXT)
#define CN_STUDENT_ITEM4 CN_STUDENT_ITEM_CYAN("4.",CN_STUDENT4_TEXT)
#define CN_STUDENT_ITEM5 CN_STUDENT_ITEM_CYAN("5.",CN_STUDENT5_TEXT)
#define CN_STUDENT_ITEM6 CN_STUDENT_ITEM_CYAN("6.",CN_STUDENT6_TEXT)

// 定义完整的中文菜单宏
#define CN_STUDENT \
    CN_STUDENT_HEADER \
    CN_STUDENT_ITEM1 \
    CN_STUDENT_ITEM2 \
    CN_STUDENT_ITEM3 \
    CN_STUDENT_ITEM4 \
    CN_STUDENT_ITEM5 \
    CN_STUDENT_ITEM6 \
    FOOTER \
    CN_PROMPT



#define CN_DEL_METHOD_TEXT "请选择删除方式"
#define CN_DEL_ID_TEXT     "学号"
#define CN_DEL_NAME_TEXT   "姓名"
#define CN_EXIT_TEXT            "退出" 

#define DEL_METHOD_HEADER(TEXT) BOLD GREEN "│ " TEXT "\n" RESET
#define DEL_METHOD_ITEM(NUM, TEXT) GREEN "│ " NUM " " TEXT " \n" RESET

// 定义语言选择菜单中的文本（中文）
#define CN_STUDENT_DEL_METHOD_HEADER DEL_METHOD_HEADER(CN_DEL_METHOD_TEXT)
#define CN_STUDENT_DEL_OPTION1 DEL_METHOD_ITEM("1. ", CN_DEL_ID_TEXT) 
#define CN_STUDENT_DEL_OPTION2 DEL_METHOD_ITEM("2. ", CN_DEL_NAME_TEXT)
#define CN_STUDENT_DEL_OPTION3 DEL_METHOD_ITEM("3. ", CN_EXIT_TEXT)

#define CN_STUDENT_DEL_MENU \
    "\n" BORDER \
    CN_STUDENT_DEL_METHOD_HEADER \
    CN_STUDENT_DEL_OPTION1 \
    CN_STUDENT_DEL_OPTION2 \
    CN_STUDENT_DEL_OPTION3 \
    FOOTER \
    CN_PROMPT

#define CN_QUE_METHOD_TEXT "请选择查询方式"
#define CN_QUE_ID_TEXT     "学号"
#define CN_QUE_NAME_TEXT   "姓名"
#define CN_EXIT_TEXT            "退出" 

#define QUE_METHOD_HEADER(TEXT) BOLD GREEN "│ " TEXT "\n" RESET
#define QUE_METHOD_ITEM(NUM, TEXT) GREEN "│ " NUM " " TEXT " \n" RESET

// 定义语言选择菜单中的文本（中文）
#define CN_STUDENT_QUE_METHOD_HEADER QUE_METHOD_HEADER(CN_QUE_METHOD_TEXT)
#define CN_STUDENT_QUE_OPTION1 QUE_METHOD_ITEM("1. ",  CN_QUE_ID_TEXT) 
#define CN_STUDENT_QUE_OPTION2 QUE_METHOD_ITEM("2. ",  CN_QUE_NAME_TEXT)
#define CN_STUDENT_QUE_OPTION3 QUE_METHOD_ITEM("3. ", CN_EXIT_TEXT)

#define CN_STUDENT_QUE_MENU \
    "\n" BORDER \
    CN_STUDENT_QUE_METHOD_HEADER \
    CN_STUDENT_QUE_OPTION1 \
    CN_STUDENT_QUE_OPTION2 \
    CN_STUDENT_QUE_OPTION3 \
    FOOTER \
    CN_PROMPT
#endif // CONSTANTS_H
